#include "SpaceSoldier.h"


SpaceSoldier::SpaceSoldier(void)
{
	tipoObj = "SpaceSoldier";
	direcaoY = 0;
	difX = 16;
	difY = 3;
	direcaoX = false;
	direita = true;
	rotY = 90;
	rotX = frameParado = 0;
}


SpaceSoldier::~SpaceSoldier(void)
{
}

void SpaceSoldier::MoverDireita()
{
	if(direcaoY != 2)
	{
		getNode()->setFrameLoop(0, 25);
		direcaoY = 2;
	}
	direita = true;
	//AplicarForca(NxVec3(1, 0, 0), 100);
	AplicarForca(NxVec3(1, 0, 0), 75);
	

}

void SpaceSoldier::MoverEsquerda()
{
	if(direcaoY != 1)
	{
		getNode()->setFrameLoop(0, 25);
		direcaoY = 1;
	}
	direita = false;
	//AplicarForca(NxVec3(-1, 0, 0), 100);
	AplicarForca(NxVec3(-1, 0, 0), 75);
}

void SpaceSoldier::Idle()
{
	direcaoY = 0;
			
	frameParado = getNode()->getFrameNr();
	getNode()->setFrameLoop(frameParado, frameParado);
}

void SpaceSoldier::Pular(int dir)
{
	AplicarForca(NxVec3(0, dir, 0), 3500);
}

void SpaceSoldier::AtualizaRot()
{
	if(direcaoY == 1 && rotY < 270)
		rotY += 4.0;
	if(direcaoY == 2 && rotY > 90)
		rotY -= 4.0;

	NxQuat q;
	q.fromAngleAxis(rotY, NxVec3(0, 1, 0));

	if(direcaoX && rotX < 180)
		rotX += 2.0;
	if(!direcaoX && rotX > 0)
		rotX -= 2.0;

	NxQuat q2;
	q2.fromAngleAxis(rotX, NxVec3(0, 0, 1));

	q2.multiply(q, q2);

	Rotaciona(q2);
}

void SpaceSoldier::InverteGrav()
{
	direcaoX = !direcaoX;
}

bool SpaceSoldier::PodeAtirar()
{
	//calcula a diferenca do nascimento do tiro em relacao Y - gravidade infuencia
	if(direcaoX)
		difY = -3;
	else
		difY = 3;

	if(direita && rotY > 80 && rotY < 91)
	{
		difX = 16;
		return true;
	}
	else if(!direita && rotY > 260)
	{
		difX = -16;
		return true;
	}

	return false;
}

int SpaceSoldier::getDifX() const
{
	return difX;
}

int SpaceSoldier::getDifY() const
{
	return difY;
}